package jp.seraph.same.model;

/**
 * 子を持つViewModelです。
 *
 * @param <ChildType>
 */
public interface HierarchicalViewModel<ChildType extends ViewModel> extends ViewModel, Iterable<ChildType> {
    public void addAddedListenner(ChildAddedListener<ChildType> aListener);
    public void removeAddedListener(ChildAddedListener<ChildType> aListener);
    public void addRemovedListener(ChildRemovedListener<ChildType> aListener);
    public void removeRemovedListener(ChildRemovedListener<ChildType> aListener);
    public ChildType get(String aChildName);
    public void add(ChildType aChild);
    public boolean contains(ChildType aChild);
    public boolean contains(String aChildName);
    public int getChildCount();

    /**
     * 対象の子を削除する
     *
     * @param aChild
     * @return 削除された子 削除されなかった場合null
     */
    public ChildType remove(ChildType aChild);

    /**
     * 対象の名前を持つ子を削除する
     *
     * @param aChildName
     * @return 削除された子 削除されなかった場合null
     */
    public ChildType remove(String aChildName);
}
